﻿// =============================================
// 文件保护宏：防止该头文件被重复包含（多次 #include 导致编译错误）
// 如果没有定义 CUSTOM_UNITY_INPUT_INCLUDED，则定义它并继续
// =============================================
#ifndef CUSTOM_UNITY_INPUT_INCLUDED
#define CUSTOM_UNITY_INPUT_INCLUDED

// =============================================
// CBUFFER_START / CBUFFER_END 是 Unity 提供的宏（特别是在 SRP 中）
// 用于将以下变量打包进一个特定的常量缓冲区（Constant Buffer），名为 UnityPerDraw
// UnityPerDraw 是 Unity 渲染管线中默认存放每物体（Per-Object）数据（如变换矩阵）的缓冲区
// =============================================
CBUFFER_START(UnityPerDraw)

    // unity_ObjectToWorld：模型矩阵（Model Matrix）
    // 作用：将物体本地坐标（Local Space）转换为世界坐标（World Space）
    // 类型：float4x4
    float4x4 unity_ObjectToWorld;

    // unity_WorldToObject：世界到模型的逆矩阵（World to Object Matrix）
    // 作用：将世界坐标系中的向量或点转换回物体的本地坐标系
    // 通常用于法线变换等操作
    // 类型：float4x4
    float4x4 unity_WorldToObject;

    // unity_LODFade：用于 Level of Detail (LOD) 淡入淡出的参数
    // 一般用于根据摄像机距离动态切换模型的细节层级（LOD Group）
    // 类型：float4（虽然通常只使用其中的 x/y 分量）
    float4 unity_LODFade;

    // unity_WorldTransformParams：世界变换参数
    // 包括一些与变换相关的额外信息，比如用于正确变换法线的缩放补偿信息
    // 通常第 w 分量用于处理非统一缩放下的法线变换
    // 类型：real4（Unity 中的 float4 别名，通常用于 HLSL 兼容性）
    real4 unity_WorldTransformParams;

// =============================================
// CBUFFER_END：结束 UnityPerDraw 常量缓冲区的定义
// =============================================
CBUFFER_END

// =============================================
// 以下变量也是 Unity 渲染管线中常用的内置矩阵，但它们没有被放入 UnityPerDraw 缓冲区
// 而是作为全局常量（通常来自 Unity 渲染上下文或 Camera 设置）
// 它们不属于每物体数据，而是每摄像机 / 每帧数据
// =============================================

// unity_MatrixVP：View-Projection 矩阵
// 作用：将世界坐标系中的点转换到裁剪空间（Clip Space），是 View * Projection 的组合
// 用于最终将物体从世界空间投影到屏幕
// 类型：float4x4
float4x4 unity_MatrixVP;

// unity_MatrixV：View 矩阵（观察矩阵）
// 作用：将世界坐标转换到摄像机视角的视图空间（View Space / Camera Space）
// 类型：float4x4
float4x4 unity_MatrixV;

// unity_MatrixInvV：View 矩阵的逆矩阵
// 作用：将视图空间中的坐标转换回世界空间，常用于某些特殊计算
// 类型：float4x4
float4x4 unity_MatrixInvV;

// unity_prev_MatrixM：上一帧的 Model 矩阵（上一帧的物体变换矩阵）
// 用于做帧间差值、运动模糊、顶点动画对比等相关效果
// 类型：float4x4
float4x4 unity_prev_MatrixM;

// unity_prev_MatrixIM：上一帧的 Model 矩阵的逆矩阵
// 与上一帧的 Model 矩阵配套使用
// 类型：float4x4
float4x4 unity_prev_MatrixIM;

// glstate_matrix_projection：OpenGL 风格的全局投影矩阵（兼容性保留）
// 在现代渲染管线中较少直接使用，一般被 unity_MatrixVP 替代
// 类型：float4x4
float4x4 glstate_matrix_projection;

// =============================================
// 文件保护宏结束：表示 CUSTOM_UNITY_INPUT_INCLUDED 已定义，防止重复 include
// =============================================
#endif